package com.gestion.controlador;

import com.gestion.modelo.ListadoPedidosModelo;
import com.gestion.modelo.dominio.EstadosPedido;
import com.gestion.modelo.dominio.Pedido;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import vista.JIFListadoPedidos;

/**
 * @author Mauri@<itsoluciones.com.ar>
 */
public class ListadoPedidosControlador {

    private ListadoPedidosModelo listadoPedidoModelo;
    private JIFListadoPedidos jIFListadosPedidos;

    //<editor-fold defaultstate="collapsed" desc="Constructor con Escuchadores, se agregan al inicio.">
    /**
     * Constructor para utilizar con la vista de Pedidos, agrega los Listener en esta sección
     * 
     * @param listadoPedidoModelo Modelo del Listado
     * @param fListadosPedidos formulario de gui
     */
    public ListadoPedidosControlador(final ListadoPedidosModelo listadoPedidoModelo, JIFListadoPedidos fListadosPedidos) {
        //System.out.println(this.toString());

        this.listadoPedidoModelo = listadoPedidoModelo;
        this.jIFListadosPedidos = fListadosPedidos;
        this.jIFListadosPedidos.setTitle("Pedidos " + listadoPedidoModelo.getEstado().toString());

        this.jIFListadosPedidos.agregarSeleccionaPedidoListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                /*int firstIndex = e.getFirstIndex();
                 System.out.println("Index Seleccionado: "+firstIndex);*/
                Long pedidoIdSeleccionado = (Long) jIFListadosPedidos.getPedidoIdSeleccionado();
                listadoPedidoModelo.seleccionarPedido(pedidoIdSeleccionado);
                //System.out.println("pedidoSeleccionado: " + pedidoIdSeleccionado);
            }
        });

        this.jIFListadosPedidos.agregarListarPedidosListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (!(listadoPedidoModelo.getPedidoSeleccionado() == null)) {
                    Pedido pedidoSeleccionado = listadoPedidoModelo.getPedidoSeleccionado();
                    PedidoControlador.invocarVista(pedidoSeleccionado);
                } 
            }
        });
        inicializarTabla();
    }

    /**
     * Invoca la vista según el ESTADO del Pedido
     * @param estado estado del Pedido
     */
    public static void invocarVista(final EstadosPedido estado) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JIFListadoPedidos jifListadosPedidos = new JIFListadoPedidos();
                ListadoPedidosModelo listadoPedidoModelo = new ListadoPedidosModelo(estado);
                ListadoPedidosControlador listadoPedidoControlador = new ListadoPedidosControlador(listadoPedidoModelo, jifListadosPedidos);
                UIControlador.getInstance().agregarVista(jifListadosPedidos);
            }
        });

    }

    private void inicializarTabla() {
        listadoPedidoModelo.setPedidos(listadoPedidoModelo.dameMisPedidos());
        jIFListadosPedidos.agregarPedidosTabla(listadoPedidoModelo.getPedidos());
    }
}
